<?php
/**
* @package      auto_occasion
* @subpackage   annonce
* @author       CMS
* @copyright    2011
* @license      All rights reserved
*/


/**
 * Classe permettant de gérer les annonces
 * ajout , rechercher, lister par type
 *
 */
class BoAnnonceCtrl extends jController {
    
   public $pluginParams = array(
                                    
                                    '*'=>array('auth.required'=>true
                                    ),
                                    'listeParType'=>array(
										'auth.required'=>true,'type_action'=>'admin',
										'jacl2.right'=>'admin.compte.gerer'
                                    )
                            );

    /**
     * Recherche / liste annonce
     *
     *
     */
    function index() {
        jClasses::inc ("commun~common") ;

        $do_search      = $this->intParam('do_search', 0);
        $iCurrentPage   = $this->intParam('iCurrentPage', 1);

        if ($iCurrentPage > 1 && isset($_SESSION['SESS_ANNONCE_BO'])) {
            $search = unserialize($_SESSION['SESS_ANNONCE_BO']);
        } else {
            $search                  = new stdClass ();
            $search->vendeur         = $this->stringParam('vendeur', '');
            $search->email           = $this->stringParam('email', '');
            $search->immatriculation = $this->stringParam('immatriculation', '');
            $search->code_partenaire = $this->stringParam('partenaire', '');
            $search->reference       = $this->stringParam('reference', '');
            $search->id_occasion     = $this->intParam('id_occasion', '');
            $search->parution        = $this->stringParam('parution', '');
            $search->naissance1      = $this->stringParam('naissance1', '');
            $search->naissance2      = $this->stringParam('naissance2', '');
            $search->modif1          = $this->stringParam('modif1', '');
            $search->modif2          = $this->stringParam('modif2', '');

            $_SESSION['SESS_ANNONCE_BO'] = serialize($search);
        }

        $rep = $this->getResponse('html');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/jquery-ui.css');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/annonce.css');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/annonce.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery.ui.core.js');
        $rep->menusActifs = adminHtmlResponse::MENU_ANNONCES ;
        // pop up mail si clic sur supprimer
        $templatemail = common::liste('ao_mail_templates');
        $rep->bodyTpl = 'annonce~BoAnnonceList';
        $rep->body->assign('templatemail',$templatemail);
        $rep->body->assignZone ('oZoneAnnonceRecheche', 'annonce~BoAnnonceRecherche', array('search'=>$search)) ;
        $rep->body->assignZone ('oZoneAnnonceListe', 'annonce~BoAnnonceListe', array('search'=>$search, 'iCurrentPage'=>$iCurrentPage)) ;

        return $rep;
    }

    /**
     * Recherche / liste annonce par type
     *
     *
     */
    function listeParType() {

        jClasses::inc("annonce~annonceSrv");
        jClasses::inc ("commun~CNavBar") ;
        jClasses::inc ("commun~parametre") ;

        $search					 = new stdClass ();
        $search->type			 = $this->stringParam('type', '');
        $search->vendeur         = $this->stringParam('vendeur', '');
        $search->email           = $this->stringParam('email', '');
        $search->immatriculation = $this->stringParam('immatriculation', '');
        $search->code_partenaire = $this->stringParam('partenaire', '');
        $search->reference       = $this->stringParam('reference', '');
        $search->id_occasion     = $this->intParam('id_occasion', '');
        $search->parution        = $this->stringParam('parution', '');
        $search->naissance1      = $this->stringParam('naissance1', '');
        $search->naissance2      = $this->stringParam('naissance2', '');
        $search->modif1          = $this->stringParam('modif1', '');
        $search->modif2          = $this->stringParam('modif2', '');
		//variable necessaire pour rediriger l'admin vers listeParType 
		$zModuleName			 = $this->stringParam('module', '');

        $nbAnnonceAValider      = annonceSrv::countAnnonceAValider();
        $nbAnnonceAControler    = annonceSrv::countAnnonceAControler();
        $nbAnnonceEnLigne       = annonceSrv::countAnnonce(ANNONCE_ETAT_EN_LIGNE);
        $nbAnnonceArchivee      = annonceSrv::countAnnonce(ANNONCE_ETAT_ARCHIVEES);
        $nbAnnonceSupprimee     = annonceSrv::countAnnonce(ANNONCE_ETAT_SUPPRIMEES);
        $nbAnnoncePayeNonValide = annonceSrv::countAnnonceByPriceAndStates(ANNONCE_ETAT_PAYEE, ANNONCE_ETAT_NON_VALIDE);
        $nbAnnonceNonPayeValide = annonceSrv::countAnnonceByPriceAndStates(ANNONCE_ETAT_NON_PAYEE, ANNONCE_ETAT_VALIDE);
        $nbAnnonceNonValide     = annonceSrv::countAnnonceByPriceAndStates(false, ANNONCE_ETAT_NON_VALIDE, false);
        $titreParType			= "";

		if ( $zModuleName =='') {
			$oUser = jAuth::getUserSession();
			$iUserProfil = $oUser->usr_profile ;
			$rep = $this->getResponse('redirect');
			if ($iUserProfil==3) {
				$rep->action = "annonce~BoAnnonce:index";
			}else{
				$rep->action = "annonce~BoAnnonce:listeParType" ;
			}
			return $rep ;
		}
        if ($search->type) {
            switch ($search->type) {
                
                case ANNONCE_A_VALIDER:
                    $titreParType = "à valider";
                    break;

                case ANNONCE_A_CONTROLER:
                    $titreParType = "à controler";
                    break;

                case ANNONCE_EN_LIGNE:
                    $titreParType = "en ligne";
                    break;

                case ANNONCE_ARCHIVEES:
                    $titreParType = "archivées";
                    break;

                case ANNONCE_SUPPRIMEES:
                    $titreParType = "supprimées";
                    break;

                case ANNONCE_PAYEES_NON_VALIDE:
                    $titreParType = "payées non valides";
                    break;

                case ANNONCE_NON_PAYEES_VALIDE:
                    $titreParType = "non payées valides";
                    break;

                case ANNONCE_NON_VALIDE:
                    $titreParType = "non valides";
                    break;
                default :$titreParType = "";
            }
        }

        $paramsItem   = parametre::get(PARAM_LISTEPARTYPE_ITEMPARPAGE);
        $itemParPage  = $paramsItem->param_content;
        $iCurrentPage = $this->stringParam("iCurrentPage",1);

        if ($iCurrentPage> 1){
            $iDebutListe = ($iCurrentPage-1) * $itemParPage; 
        }else{
            $iDebutListe = 0 ;
        }
        $oNavBar = new CNavBar ($itemParPage, 3) ;
        $oNavBar->iCurrPage = $iCurrentPage;
        


        $annonce = annonceSrv::recherche($search, $iDebutListe, $itemParPage);

        $oNavBar->normalizeBar ($annonce['nbRecords']) ;
        $oNavBar->mergeBar ();

        $rep = $this->getResponse('html');

        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/annonce.css');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/annonce.js');
		$rep->menusActifs = adminHtmlResponse::MENU_ANNONCES ;

        $rep->bodyTpl = 'annonce~BoAnnonceParType';

        $rep->body->assign("oNavBar", $oNavBar) ;
        $rep->body->assign("nbAnnonceAValider", $nbAnnonceAValider) ;
        $rep->body->assign("nbAnnonceAControler", $nbAnnonceAControler) ;
        $rep->body->assign("nbAnnonceEnLigne", $nbAnnonceEnLigne) ;
        $rep->body->assign("nbAnnonceArchivee", $nbAnnonceArchivee) ;
        $rep->body->assign("nbAnnonceSupprimee", $nbAnnonceSupprimee) ;
        $rep->body->assign("nbAnnoncePayeNonValide", $nbAnnoncePayeNonValide) ;
        $rep->body->assign("nbAnnonceNonPayeValide", $nbAnnonceNonPayeValide) ;
        $rep->body->assign("nbAnnonceNonValide", $nbAnnonceNonValide) ;
        $rep->body->assign('annonce'       , $annonce['annonce']);
        $rep->body->assign('type'       , $search->type);
        $rep->body->assign('titreParType'       , $titreParType);
        
        return $rep;
    }



   /*
	* Description : Cette fonction permet d'editer une annoce ou en cas de validatin d'une annoce on se redirige vers cette action
	* Avec les parametres suivant ://choix-form=1/choix=34,36,37/RefPaiement=cb/montant=151988/ref=3/auto=XXXXXX/trans=340837
	* @param  empty 
	* @return $oResponse
	*/
    function editer() {
		
		//Inclusion des classes services necessaires 
        jClasses::inc("annonce~annonceEnrichissementSrv");
        jClasses::inc("annonce~annonceGarantieSrv");
        jClasses::inc("annonce~annonceOrigineSrv");
        jClasses::inc("annonce~annoncePaiementSrv");
        jClasses::inc("annonce~annonceParutionSrv");
        jClasses::inc("annonce~annoncePhotoSrv");
        jClasses::inc("annonce~annonceProvenanceSrv");
        jClasses::inc("annonce~annonceSourceSrv");
        jClasses::inc("annonce~annonceSrv");
        jClasses::inc("annonce~annonceFormuleSrv");
        jClasses::inc("annonce~annonceEquipementSrv");
        jClasses::inc("formule~formuleSrv");
        jClasses::inc("commun~common");

 
        //page d'edition (true) ou ajout annonce (false)
        $edition = false;

        $paiement            = $this->stringParam('RefPaiement');
        $origine             = $this->intParam('origine','0');
        $garantie            = $this->intParam('garantie','0');
        $idFormule           = $this->intParam('choix-form', 0);
        $idOccasion          = $this->intParam('idOccasion',0);
        $montant             = $this->floatParam('montant',0);
        $tarif_norm          = $this->floatParam('tarif_norm',0);
        
        $montant = ($tarif_norm) ? $tarif_norm : $montant;
        // get the formule id after CB
        if (!$idFormule && isset($_COOKIE['coo_id_formule'])) {
            $formule_ = unserialize($_COOKIE['coo_id_formule']);
            $idFormule =$formule_;

        }

        if(($idFormule == 0) && ($idOccasion != 0)){
            $edition				= true;
            $idFormule				= annonceFormuleSrv::getAnnonceFormuleByAnnonce($idOccasion) ;
            if($idFormule == 0){
                 $voitureSelected	= common::chargeParId($idOccasion, "ao_voiture_occasion");
                 $idFormule			= annonceFormuleSrv::getFormuleFromOldDatas($voitureSelected->Occas_Reference);
            }
        }
       
        
        
        /*recuperation choix supplementaires choisis*/
        $listeChoix     = $this->stringParam('choix','');
        $prixoption     = $this->intParam('prixOption',0);


        if (!$edition && isset($_SESSION['BO_SESS_FORMULE_CHOISIE'])){
            $search = unserialize($_SESSION['BO_SESS_FORMULE_CHOISIE']);
            $idFormule  = $search->idFormule;
            $listeChoix = $search->listeChoix;
        }



        /*generation option de parution*/
		$optParution		= array() ;
        if ($idFormule){
            $optParution    = annonceFormuleSrv::generateOptParutionByFormuleId($idFormule);
            $optParution    = $optParution['option'];
        }

		// récapitulation du prix total : prix formule + prix des options ajoutés
		// récupération du prix de la formule
        $prixFormule	= ($idFormule) ? common::chargeParId ($idFormule, 'ao_formule')->prix : 0 ; //$prixFormule->prix
        //Prix de chaque nouvelle option ajoutée autre que celles déjà incorporée dans la formule
        $prixTotal		= $prixFormule;
        if($listeChoix != ''){
            $tabPrix	= formuleSrv::getPrixOptionChoisie($listeChoix);
            if(sizeOf($tabPrix))  $prixTotal += $tabPrix[0]->prix_option;
        }
        

        // Mise en session de la formule ainsi que les options choisies
        $fomuleChoisie				=  new stdClass();
        $fomuleChoisie->idFormule	=  (!$edition && isset($_SESSION['BO_SESS_FORMULE_CHOISIE']) ) ? $search->idFormule : $idFormule;
        $fomuleChoisie->origine		=  (!$edition && isset($_SESSION['BO_SESS_FORMULE_CHOISIE']) ) ? $search->origine : $origine;
        $fomuleChoisie->garantie	=  (!$edition && isset($_SESSION['BO_SESS_FORMULE_CHOISIE'])) ? $search->garantie : $garantie;
        $fomuleChoisie->paiement	=  (!$edition && isset($_SESSION['BO_SESS_FORMULE_CHOISIE'])) ? $search->paiement : $paiement;
        $fomuleChoisie->recapPrix	=  ($montant) ? $montant : $prixTotal;
        $fomuleChoisie->listeChoix	=  (!$edition && isset($_SESSION['BO_SESS_FORMULE_CHOISIE'])) ? $search->listeChoix : $listeChoix;
        $fomuleChoisie->options		=  (!$edition && isset($_SESSION['BO_SESS_FORMULE_CHOISIE'])) ? $search->options : $optParution;

        $_SESSION['BO_SESS_FORMULE_CHOISIE'] = serialize($fomuleChoisie);

        $caracteristique			  = array();
        $caracteristique['paiement']  = (isset($fomuleChoisie->paiement)) ? ($fomuleChoisie->paiement) : $paiement;
        $caracteristique['origine']   = isset($fomuleChoisie->origine) ? ($fomuleChoisie->origine) : $origine;
        $caracteristique['garantie']  = isset($fomuleChoisie->garantie) ? ($fomuleChoisie->garantie) : $garantie;
        $caracteristique['recapPrix'] = isset($fomuleChoisie->recapPrix) ? ($fomuleChoisie->recapPrix) : $prixTotal;
        $caracteristique['options']   = isset($fomuleChoisie->options) ? ($fomuleChoisie->options) : $optParution;

        $provenance					  = annonceProvenanceSrv::liste();
		$formule					  = new stdClass() ;
        $formule					  = ($idFormule) ? common::chargeParId($idFormule, "ao_formule") : common::chargeParId($fomuleChoisie->idFormule, "ao_formule");

		//Type de reponse
		$rep						  = $this->getResponse('html');

		//Inclusion des javascripts et css
		$rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery.validation.js');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/jquery-ui.css');
		$rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/galleriffic.css');
		$rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/fileuploader.css');
		$rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/editionAnnonce.css');
		$rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/annonceChoixFormule.css');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery-ui.min.js');
		$rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/ajaxupload.3.5.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery.iframe.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery.opacityrollover.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery.history.js');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/css/infiniteCarousel.css');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/css/annonceDeposer.css');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/prettyPhoto/css/prettyPhoto.css');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/css/photoUpload.css');         
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/prettyPhoto/js/jquery.prettyPhoto.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/js/infiniteCarousel.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/js/photoUpload.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/js/annonceDeposer.js');

	    $rep->menusActifs = adminHtmlResponse::MENU_ANNONCES ;

        // pop up mail si clic sur supprimer
        $templatemail = common::liste('ao_mail_templates');
		//Assignation des variables
        $rep->body->assign('garantie'      , $garantie);
        $rep->body->assign('origine'       , $origine);
        $rep->body->assign('paiement'      , $paiement);
        $rep->body->assign('parution'      , $optParution);
        $rep->body->assign('provenance'    , $provenance) ;
        $rep->body->assign('formule'       , $formule);
        $rep->body->assign('fomuleChoisie' , $fomuleChoisie);
        $rep->body->assign('templatemail',$templatemail);
        
        
		//nom du temlate 
        $rep->bodyTpl = 'annonce~BoAnnonceEdit';
        
        $photoAnnonceParams = array() ;
        $equipementParams   = array() ;
        $equipementComment  = array() ;
        
        if($idOccasion){

				$voitureSelected							= common::chargeParId($idOccasion, "ao_voiture_occasion") ;

				$equipementComment['comment']				= $voitureSelected->Occas_Commentaire ;

				if (strlen($voitureSelected->Occas_Commentaire) > 90) {

					$equipementComment['comment_restant']	= 0;
					$equipementComment['comment']			= substr($voitureSelected->Occas_Commentaire, 0, 90) . '...' ;

				} else {
					$equipementComment['comment_restant']	= 91 - strlen($voitureSelected->Occas_Commentaire) ;

				}

				$equipementComment['partenaire']			= $voitureSelected->Occas_Partenaire ;

				if($this->intParam('idAnnonce')) 
				{
					$idAnnonce = $this->intParam('idAnnonce') ;	
				}
				elseif($voitureSelected->IdOccasion != null)
				{
					$idAnnonce = $voitureSelected->IdOccasion ;
				}

             
				if(isset($idAnnonce) && ($idAnnonce != '')){

					$annonceSelected						= $voitureSelected ;

					$an_reference							= new stdClass() ;

					$an_reference->source					= (common::chargeParId($annonceSelected->annonce_source_id, "ao_annonce_source")) ? common::chargeParId($annonceSelected->annonce_source_id, "ao_annonce_source")->source_name : '' ;

					$an_reference->prov						= (common::chargeParId($annonceSelected->annonce_provenance_id, "ao_annonce_provenance"))?common::chargeParId($annonceSelected->annonce_provenance_id, "ao_annonce_provenance")->provenance_name:'' ;

					$an_reference->parut					= (common::chargeParId($annonceSelected->annonce_parution_id, "ao_annonce_parution"))?common::chargeParId($annonceSelected->annonce_parution_id, "ao_annonce_parution")->parution_name : '' ;

					$an_reference->photo					= (common::chargeParId($annonceSelected->annonce_photo_id, "ao_annonce_photo")) ? common::chargeParId($annonceSelected->annonce_photo_id, "ao_annonce_photo")->photo_name : '' ;

					$an_reference->enr						= (common::chargeParId($annonceSelected->annonce_enrichissement_id, "ao_annonce_enrichissement")) ? common::chargeParId($annonceSelected->annonce_enrichissement_id, "ao_annonce_enrichissement")->enrichissement_name : '' ;

					$an_num_parut							= annonceParutionSrv::getParutionNum($voitureSelected->Occas_DateSaisie);

					$photoAnnonceParams['annonceSelected']	= $annonceSelected ;
					$equipementParams['annonceSelected']	= $annonceSelected->IdOccasion ;
					$choixEquipements						= annonceEquipementSrv::getChoixEquipementsByAnnonceId($annonceSelected->IdOccasion) ;
					$rep->body->assign('annonceSelected'       , $annonceSelected) ;
					$rep->body->assign('choixEquipements'      , $choixEquipements) ;

				} else{

					if($this->intParam('idOccasion')){

						$an_reference						= annonceSrv::genererNomRef($voitureSelected->Occas_Reference) ;
						$references							= annonceSrv::genererRef($voitureSelected) ;
						$an_num_parut						= substr($voitureSelected->Occas_Reference, 0, 3) ;
						$an_num_refer						= $an_num_parut.'-'.substr($voitureSelected->Occas_Reference, 12) ;

						$rep->body->assign('an_num_refer',$an_num_refer) ;
						$rep->body->assign('references', $references);
					}
				}

				$photoAnnonceParams['idOccasion']			= $this->intParam('idOccasion') ;
				$equipementParams['equipementTxt']			= $voitureSelected->Occas_Equip ;
				$vendeur									= common::chargeParId($voitureSelected->Occas_Vendeur, "ao_vendeur") ;

				$rep->body->assign('idOccasion',$this->intParam('idOccasion')) ;
				$rep->body->assign('vendeur',$vendeur) ;
				$rep->body->assign('voiture',$voitureSelected);

				$an_partenaire								= ($voitureSelected->Occas_Partenaire != '') ? common::chargeParId($voitureSelected->Occas_Partenaire, "ao_partenaire")->Part_Libelle : "" ;

				$rep->body->assign('an_num_parut',$an_num_parut) ;
				$rep->body->assign('an_partenaire',$an_partenaire) ;
				$rep->body->assign('an_reference',$an_reference);
            
            
				if (($voitureSelected->Occas_Fimage != null) && ($voitureSelected->Occas_Fimage != ''))
				{
					$photoAnnonceParams['photoOccasion']	= $voitureSelected->Occas_Fimage ;
					$rep->body->assignZone ('oZoneAnnonceCoordonnees','annonce~BoAnnonceCoordonnees',array('voiture'=>$voitureSelected)) ;
					$rep->body->assignZone ('oZoneCaracteristiqueVoiture','annonce~BoAnnonceCaracteristiqueVoiture',array('idOccasion'=>$this->intParam('idOccasion'))) ;
				}
			}
			else {
				$rep->body->assignZone ('oZoneCaracteristiqueVoiture','annonce~BoAnnonceCaracteristiqueVoiture') ;
				$rep->body->assignZone ('oZoneAnnonceCoordonnees','annonce~BoAnnonceCoordonnees',array('caracteristique'=>$caracteristique)) ;
			}

			$rep->body->assignZone ('oZoneCommentaire','annonce~BoAnnonceCommentaire',$equipementComment) ;
			$rep->body->assignZone ('oZoneAnnonceEquipements','annonce~BoAnnonceEquipements',$equipementParams) ;
			$rep->body->assignZone ('oZoneAnnoncePhoto','annonce~BoAnnonceEditPhoto',$photoAnnonceParams) ;
			return $rep;
    }

    /**
     * Editer une annonce
     *
     */
    function ajouter() {

        $rep = $this->getResponse('html');
        $rep->menusActifs = adminHtmlResponse::MENU_ANNONCES ;
        $rep->bodyTpl = 'annonce~BoAnnonceAdd';

        return $rep;
    }

	/*
	* Description : Cette fonction permet de sauvgarder une annonce apres payement en ligne
	* On tombe dans la page d'edition d'une annonce 
	* @param  empty 
	* @return $oResponse
	*/
     function sauvegarder() {

        jClasses::inc("annonce~annonceSrv");
        jClasses::inc("commun~communSrv");
        jClasses::inc("commun~common");
        jClasses::inc("annonce~vendeurSrv");

        jClasses::inc("formule~formuleSrv");

        $annonce                             = new stdClass();
        $annonce->annonce_id                 = $this->intParam('annonce_id',0);
        $annonce->idOccasion                 = $this->intParam('idOccasion',0);
        $annonce->vendeur_id                 = $this->intParam('vendeur_id',0);
        $annonce->annonce_source_id          = $this->intParam('source','');
        $annonce->annonce_provenance_id      = $this->intParam('provenance','');
        $annonce->annonce_parution_id        = $this->intParam('parution','');
        $annonce->annonce_photo_id           = $this->intParam('photo','');
        $annonce->annonce_enrichissement_id  = $this->intParam('enrichissement','');
        $annonce->annonce_paiement_id        = addslashes(trim($this->stringParam('paiement')));
        $annonce->annonce_origine_id         = $this->intParam('origine','');
        $annonce->annonce_garantie_id        = $this->intParam('garantie','');
        $annonce->annonce_email              = addslashes(trim($this->stringParam('email')));
        $annonce->annonce_id_equipement      = $this->param('id_equipement','');
        $annonce->vendeur_civilite           = addslashes(trim($this->stringParam('civilite','')));
        $annonce->vendeur_nom                = addslashes(trim($this->stringParam('nom','')));
        $annonce->vendeur_prenom             = addslashes(trim($this->stringParam('prenom','')));
        $annonce->vendeur_naissance          = communSrv::toDateSql(trim($this->stringParam('date_naissance','')));
        $annonce->vendeur_adresse            = addslashes(trim($this->stringParam('adresse','')));
        $annonce->vendeur_cp                 = addslashes(trim($this->stringParam('cp','')));
        $annonce->vendeur_ville              = addslashes(trim($this->stringParam('ville','')));
        $annonce->vendeur_transfert          = addslashes(trim($this->stringParam('transfert','')));
        $annonce->vendeur_pays               = addslashes(trim($this->stringParam('pays','')));
        $annonce->vendeur_departement        = addslashes(trim($this->stringParam('departement','')));
        $annonce->vendeur_immatriculation    = addslashes(trim($this->stringParam('immatriculation','')));
        $annonce->vendeur_tel_dom            = addslashes(trim($this->stringParam('domicile','')));
        $annonce->vendeur_tel_bureau         = addslashes(trim($this->stringParam('bureau','')));
        $annonce->vendeur_tel_por            = addslashes(trim($this->stringParam('portable','')));

        $annonce->vendeur_tel_dom            = ($annonce->vendeur_tel_dom) ? vendeurSrv::formatTel($annonce->vendeur_tel_dom) : $annonce->vendeur_tel_dom; 
        $annonce->vendeur_tel_bureau         = ($annonce->vendeur_tel_bureau) ? vendeurSrv::formatTel($annonce->vendeur_tel_bureau) : $annonce->vendeur_tel_bureau; 
        $annonce->vendeur_tel_por            = ($annonce->vendeur_tel_por) ? vendeurSrv::formatTel($annonce->vendeur_tel_por) : $annonce->vendeur_tel_por; 

        $annonce->vendeur_email              = addslashes(trim($this->stringParam('email','')));
        $annonce->annonce_video              = addslashes(trim($this->stringParam('annonce_video','')));
        $annonce->annonce_photo              = ($this->stringParam('photo-annonce','') != '') ? $this->stringParam('fic_princ','').','.$this->stringParam('photo-annonce','') : $this->stringParam('fic_princ','');
        $annonce->annonce_formule_id         = $this->intParam('formule','');
        $annonce->quandMeJoindre             = addslashes(trim($this->stringParam('joindre','')));
        $annonce->Vendeur_Adresse_Ip         = $_SERVER["REMOTE_ADDR"];
        $annonce->Vendeur_Localisation_Ip    = '';
        
        /* localisation IP */        
        $localisations = vendeurSrv::getVendeurCoordsByIP($_SERVER['REMOTE_ADDR']);
        if($localisations != null) {
            $annonce->Vendeur_Localisation_Ip    = $localisations['regionName'] . ' - ' . $localisations['cityName'];
        }
        // param suplémentaire (partenaire et caracteristique du véhicule)
        $annonce->Occas_Groupe              = $this->intParam('ess_iCatId','');
        $annonce->Occas_FImage              = $this->intParam('FImage','');
        $annonce->Occas_Marque              = $this->intParam('ess_iMarqueId','');
        $annonce->Occas_Modele              = $this->intParam('ess_iModelId','');
        $annonce->Occas_Version             = addslashes(trim($this->stringParam('ess_zVersion','')));
        $annonce->Occas_Carburation         = $this->intParam('voiture_energie','');
        $annonce->Occas_Prix                = $this->intParam('voiture_prix','');
        $annonce->Occas_Adebattre           = $this->intParam('voiture_debattre','');
        $moisCirculation                    = trim($this->stringParam('circulation_1',''));
        $anneeCirculation                   = trim($this->stringParam('circulation_2',''));

        $annonce->Occas_MiseCirculation = ($moisCirculation && $anneeCirculation) ? $anneeCirculation . '-' . $moisCirculation . '-01' : '0000-00-00';
        $annonce->Occas_Millesime       = addslashes(trim($this->stringParam('millesime','')));
        $annonce->Occas_Kilometrage     = addslashes(trim($this->stringParam('km','')));
        $annonce->Occas_Kilom_Moteur    = addslashes(trim($this->stringParam('km-moteur','')));
        $annonce->Occas_Couleur         = addslashes(trim($this->stringParam('couleur','')));
        $annonce->Occas_Coul_Metal      = $this->intParam('metal','');
        $annonce->Occas_ChevFisc        = $this->intParam('puiss-fiscal','');
        $annonce->Occas_NbPorte         = $this->intParam('nb-porte','');
        $annonce->Occas_Bt_Vitesse      = $this->intParam('boite','');
        $annonce->Occas_Premieremain    = $this->intParam('main','');
        $annonce->Occas_CT              = addslashes(trim($this->stringParam('ctrl-tech','')));
        $annonce->Occas_IDpartenaire    = $this->intParam('partenaire','0');
        $annonce->Occas_Commentaire     = addslashes(trim($this->stringParam('comment','')));
        $annonce->Occas_Reference       = addslashes(trim($this->stringParam('reference','')));
        $annonce->Occas_Opt_Parution    = $this->intParam('opt_parution','0');
        $annonce->Occas_TypePaiement    = addslashes(trim($this->stringParam('RefPaiement','')));
        $annonce->Occas_Valide          = $this->intParam('validite','0');
        $annonce->Occas_Montantpaye     = $this->param('montant','0');
        $moisGarantie					= trim($this->stringParam('garantie_1',''));
        $anneeGarantie					= trim($this->stringParam('garantie_2',''));
        $typeRequete					= trim($this->stringParam('action',''));
        $annonce->Occas_Garantie = ($moisGarantie && $anneeGarantie) ? $anneeGarantie . '-' . $moisGarantie . '-01' : '0000-00-00';

        // récupération des choix ds équipements
        $annonce->annonce_choix_equipement = annonceSrv::getAnnonceChoixEquipement($this->params());


        $annonce->vendeur_id = annonceSrv::getVendeurId($annonce);
        $annonce->annonce_id = $annonce->idOccasion;
        $annonce->choix      = annonceSrv::getEquipmentChoix($annonce->annonce_choix_equipement);

        // insertion des données dans la table ao_voiture_occasion
        $annonce->operateur  = "Administrateur";
        $annonce->idOccasion = annonceSrv::insertOrUpdateVoitureOccasion($annonce);

        annonceSrv::deleteEquipementAnnonce($annonce->idOccasion);

		if($annonce->annonce_photo) {
            //recuperer les id des photos déja existant
            $annonce_photo = array_unique (explode(",",$annonce->annonce_photo));
            $empty_elements = array("");
            $annonce_photo = array_diff($annonce_photo,$empty_elements);
			$photo_id = annonceSrv::returnIdPhotos($annonce_photo);
				
		} else {
            //il n'y a pas d'Idphotos
            $photo_id = array();
        }
        //mettre à jour la correspondance photo_id - annonce_id
        annonceSrv::insertPhotoAnnonce($annonce->idOccasion, $photo_id );
        
        if(($annonce->idOccasion != 0)&&($annonce->annonce_id_equipement)) {
                annonceSrv::insertAnnonceEquipment($annonce->idOccasion,$annonce->annonce_id_equipement );
        }
        
        if(($annonce->idOccasion != 0)&&($annonce->choix)) {

                annonceSrv::insertAnnonceEquipmentChoix($annonce->idOccasion,$annonce->choix );
        }

        $rep = $this->getResponse('redirect');
        $rep->action = 'annonce~BoAnnonce:previsualiser';
        $paramEdit = array();
        if ($annonce->idOccasion != 0) $paramEdit['idAnnonce']  = $annonce->idOccasion;
        if ($annonce->idOccasion != 0)  { 
            $paramEdit['idOccasion'] = $annonce->idOccasion;

            // association de la formule choisie à l'annonce : garder les options déjà présente dans la formule - ajouter les nouvelles options 
            if (isset($_SESSION['BO_SESS_FORMULE_CHOISIE'])) {
                
                formuleSrv::linkOptFrom($annonce->idOccasion);
            }

        }
        $rep->params = $paramEdit;

        return $rep;
    }

    
    /**
    * Supprime une annonce, depuis la page de recherche en BO
    */
    function supprimer() {

        jClasses::inc('annonce~annonceSrv');
        jClasses::inc('commun~common');
        jClasses::inc("commun~toolsMail");

        $tabId     = $this->intParam('tabId', '');
        $idTplMail = $this->intParam('mailtpl', 0);

        if ($tabId) {
            // récupération des mails des vendeurs correspondant aux annonces sélectionnées
            $vendeurMail = annonceSrv::getVendeurMailByAdvertId ($tabId);
            // $vendeurMail = array("f.andria@medias-solution.com", "narilalaina.fabrice@gmail.com", "fabrice.narilalaina@facebook.com");
            if (sizeof($vendeurMail) && $idTplMail) {
                // récupérer le corps du mail
                $mailTpl = common::chargeParId($idTplMail, 'ao_mail_templates');
                if (isset($mailTpl->mail_content) && $mailTpl->mail_content) {
                    $datas = new stdClass();
                    $datas->email       = $vendeurMail;
                    $datas->Username    = "Auto-occasion";
                    $datas->FromName    = "Webmaster";
                    $datas->Subject     = "Auto-occasion : suppression de votre annonce";

                    $datas->message =  $mailTpl->mail_content;
                    toolsMail::sendMail($datas);
                }
            }
            // MAJ de l'état à supprimé
            annonceSrv::updateStatus($tabId);
        }

        $rep = $this->getResponse('redirect');
        $rep->action = 'annonce~BoAnnonce:index';

        return $rep;
    }
    
    /*
     * @desc Modifie status annonce
     */
    function modifyStatus() {
        $rep = $this->getResponse('redirect');

        jClasses::inc('annonce~annonceSrv');
        jClasses::inc('commun~common');
        jClasses::inc("commun~toolsMail");

        $idOccasion   = $this->intParam('idOccasion', '');
        $status       = $this->intParam('status', '');
        $emailVendeur = $this->stringParam('mail_vendeur', '');
        $idTplMail    = $this->intParam('mailtpl', 0);
        annonceSrv::updateStatus($idOccasion,$status);

        // envoi le mail au vendeur % au pop
        if (filter_var($emailVendeur, FILTER_VALIDATE_EMAIL) && $idTplMail) {
            // récupérer le corps du mail
            $mailTpl = common::chargeParId($idTplMail, 'ao_mail_templates');
            if (isset($mailTpl->mail_content) && $mailTpl->mail_content) {
                $datas = new stdClass();
                $datas->email       = $emailVendeur;
                $datas->Username    = "Auto-occasion";
                $datas->FromName    = "Webmaster";
                $datas->Subject     = "Auto-occasion : suppression de votre annonce";

                $datas->message =  $mailTpl->mail_content;
                toolsMail::sendMail($datas);
            }
        }
        /*
         * Ne plus enregistrer les modif si validation de l'annonce
         */
        if($status == 1) {
            annonceSrv::deleteChangesSaved ($idOccasion);
            // redirection vers la page : liste par type : annonce à valider
            $rep->action = 'annonce~BoAnnonce:listeParType';
            $rep->params = array('type'=>ANNONCE_A_VALIDER);

        } else {
            $rep->action = 'annonce~BoAnnonce:editer';
            $rep->params = array('idOccasion'=>$idOccasion);
        }

        return $rep;
    }

	/*
	* Description : Cette fonction permet d'ajouter une annoce dans le BO et FO
	* On rapelle que à chaque annonce associe à une formule et chaque formule a les options obligatores et suplémentaire
	* Lors d'ajout d'une annonce :Si l'annonce est validée on cree une correspondance entre annonce /formule /options dans la table ao_annonce_formule
	* En cas de validation de l'annonce on redirige vers module=annonce&action=BoAnnonce:editer
	* En passant les parametres choix-form=1/choix=34,36,37/RefPaiement=cb/montant=151988/ref=3/auto=XXXXXX/trans=340837
	* Fonction permettant de creer une annoce dans le BO et FO
	* @param  empty
	* @return $oResponse
	*/
    function choixFormule() {
		
		// Inclusion des classes services
        jClasses::inc("annonce~annonceFormuleSrv") ;
        jClasses::inc("formule~formuleSrv");
        jClasses::inc("formule~formuleOptionSrv");
        jClasses::inc('temoignage~temoignageSrv');
        jClasses::inc('commun~parametre');
        jClasses::inc('commun~common');
        jClasses::inc("annonce~annonceOrigineSrv");
        jClasses::inc("annonce~annonceGarantieSrv");
        jClasses::inc('commun~parametre');

        $oFormule = annonceFormuleSrv::getFormule();
		//on supprime la Session stockant la formule choisie avant
        if (isset($_SESSION['BO_SESS_FORMULE_CHOISIE']))
		{
            unset($_SESSION['BO_SESS_FORMULE_CHOISIE']);
        }

		//Type de response
        $oResponse				= $this->getResponse('html');

	    $oResponse->menusActifs	= adminHtmlResponse::MENU_ANNONCES ;
		
		//Inclusion des javascript et css
        $oResponse->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/annonceChoixFormule.css');
        $oResponse->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/jquery-ui.css');
		$oResponse->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/ui.multiselect.css');
        $oResponse->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery-ui.min.js');
		$oResponse->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery.localisation-min.js');
		$oResponse->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/ui.multiselect.js');
   		$oResponse->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/entreprise.js');
   		$oResponse->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/choixFormule.js');

        $oOrigine			= annonceOrigineSrv::liste();
        $oGarantie			= annonceGarantieSrv::liste();
        
        //options pour l'annonce
        $oFormuleSelected   = common::chargeParId(ID_FORMULE_DYNAMIQUE, "ao_formule");
        $oChoixFormules		= annonceFormuleSrv::getFormulesChoices($oFormuleSelected->id);
        $toOptPrixSup		= annonceFormuleSrv::getOptionsPrixSup($oChoixFormules,0,'');

        //pour mail vendeur utilisé dans le paiement par carte bancaire 
        $oParams			= parametre::get(PARAM_MAIL_PAIEMENT_CB);
        $oVendeur			= $oParams->param_content;

        
        //chemin utilisé lors de validation ou refus de paiement par carte bancaire
        $zPathregret		= 'http://' . $_SERVER['SERVER_NAME'] .  jUrl::get('annonce~BoPaiementCarteBancaire:regret');
        $zUrlRetourDefaut	= 'http://' . $_SERVER['SERVER_NAME'] .  jUrl::get('annonce~BoAnnonce:editer', array('choix-form'=>ID_FORMULE_DYNAMIQUE));
       
		//Précision du template qu prend la reponse
        $oResponse->bodyTpl	= 'annonce~BoAnnonceChoixFormule';
		
		//Assignation des variables necessaires pour la reponse
		$oResponse->body->assign('formuleSelected', $oFormuleSelected);
        $oResponse->body->assign('choixFormules', $oChoixFormules);
        $oResponse->body->assign('optPrixSup', $toOptPrixSup);
        $oResponse->body->assign('formule',       $oFormule);
        $oResponse->body->assign('origine'       , $oOrigine);
        $oResponse->body->assign('garantie'      , $oGarantie);
        $oResponse->body->assign('vendeur',$oVendeur);
        $oResponse->body->assign('pathregret',$zPathregret);
        $oResponse->body->assign('urlRetourDefaut',$zUrlRetourDefaut);

        return $oResponse;
    }


    /*
     * Dans l'ajout d'annonce, lors du choix des formules, on effectue la redirection suivant les critères
     */
    function redirectByChoiceFormule() {

        jClasses::inc('annonce~annonceSrv');

        // Récupération des paramètres

        $idOccasion = $this->intParam('idOccasion', '');
        $status     = $this->intParam('status', '');
        annonceSrv::updateStatus($idOccasion,$status);

        $rep = $this->getResponse('redirect');
        $rep->action = 'annonce~BoAnnonce:editer';
        $rep->params = array('idOccasion'=>$idOccasion);

        return $rep;
    }
	
	
	/**
     * Annonce prévisualiser
     *
     *
     */
    function previsualiser() {

        jClasses::inc("annonce~annonceEnrichissementSrv");
        jClasses::inc("annonce~annonceGarantieSrv");
        jClasses::inc("annonce~annonceOrigineSrv");
        jClasses::inc("annonce~annoncePaiementSrv");
        jClasses::inc("annonce~annonceParutionSrv");
        jClasses::inc("annonce~annoncePhotoSrv");
        jClasses::inc("annonce~annonceProvenanceSrv");
        jClasses::inc("annonce~annonceSourceSrv");
        jClasses::inc("annonce~annonceFormuleSrv");
        jClasses::inc("annonce~annonceSrv");
        jClasses::inc("annonce~vendeurSrv");
        jClasses::inc("annonce~annonceEquipementSrv");
        jClasses::inc("commun~common");
        jClasses::inc("commun~toolsFile");
        jClasses::inc("commun~LibUtil");
        
        $paiement            = $this->stringParam('RefPaiement');
        $origine             = $this->intParam('origine','0');
        $garantie            = $this->intParam('garantie','0');
        $idAnnonce           = $this->intParam('idAnnonce','0');
        $idOccasion          = $this->intParam('idOccasion','0');

        // Mise en session de la formule ainsi que les options choisies
        $fomuleChoisie					= new stdClass();
        $fomuleChoisie->idFormule		= $this->intParam('id-formule', 0);

        $caracteristique				= array();
        $caracteristique['paiement']	= $paiement;
        $caracteristique['origine']		= $origine;
        $caracteristique['garantie']	= $garantie;

        $enrichissement					= annonceEnrichissementSrv::liste();
        $parution						= annonceParutionSrv::liste();
        $provenance						= annonceProvenanceSrv::liste();
        $source							= annonceSourceSrv::liste();
        $annonceS						= annonceSrv::getAll(1, $idOccasion);
        if ($annonceS[0]->marque_logo) 
            $annonceS[0]->marque_logo = str_replace("marques/", "marques/fiches/", $annonceS[0]->marque_logo);

		$rep = $this->getResponse('html');
		
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/jquery-ui.css');
		$rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/galleriffic.css');
		$rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/fileuploader.css');
		$rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/editionAnnonce.css');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/prettyPhoto/css/prettyPhoto.css');
        
        
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/prettyPhoto/js/jquery.prettyPhoto.js');
       
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/js/jquery.idTabs.min.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/js/ddsmoothmenu.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/js/filter.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery.validation.js');
        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/js/jquery.galleriffic.js');
        
        $rep->menusActifs = adminHtmlResponse::MENU_ANNONCES ;

        $rep->body->assign('annonceS', $annonceS[0]);
        $rep->body->assign('enrichissement', $enrichissement);
        $rep->body->assign('garantie'      , $garantie);
        $rep->body->assign('origine'       , $origine);
        $rep->body->assign('paiement'      , $paiement);
        $rep->body->assign('parution'      , $parution);
        $rep->body->assign('provenance'    , $provenance) ;
        $rep->body->assign('source'        , $source);
        $rep->body->assign('idAnnonce'     , $idAnnonce);
        $rep->bodyTpl = 'annonce~BoAnnoncePrevisualiser';
        
        $photoAnnonceParams = $equipementParams = $equipementComment = array() ;
       
        if($idOccasion){

            $voitureSelected							= common::chargeParId($idOccasion, "ao_voiture_occasion");
			$voitureSelected->Occas_MiseCirculation		= LibUtil::toDateFR($voitureSelected->Occas_MiseCirculation) ;
			$voitureSelected->Occas_Garantie			= LibUtil::toDateFR($voitureSelected->Occas_Garantie) ;
			$voitureSelected->Occas_DateSaisie			= LibUtil::toDateFR($voitureSelected->Occas_DateSaisie) ;
			$voitureSelected->Occas_DateModif			= LibUtil::toDateFR($voitureSelected->Occas_DateModif) ;
			$voitureSelected->Occas_DateEnLigne			= LibUtil::toDateFR($voitureSelected->Occas_DateEnLigne) ;
			$voitureSelected->Occas_DateDerAdmin		= LibUtil::toDateFR($voitureSelected->Occas_DateDerAdmin) ;
			$voitureSelected->Occas_DateDerAdmin		= LibUtil::toDateFR($voitureSelected->Occas_DateDerAdmin) ;
	
            $marque										= common::chargeParId( $voitureSelected->Occas_Marque, 'ao_marque')->marque_libelle;
            $modele										= common::chargeParId( $voitureSelected->Occas_Modele, 'ao_modele')->modele_libelle;
            $categ										= common::chargeParId( $voitureSelected->Occas_Groupe, 'ao_categorie_voitures')->catV_zLibelle ;
            $carbu										= common::chargeParId( $voitureSelected->Occas_Carburation, 'ao_carburation')->name;
            $moyenne									= vendeurSrv::calculMoyenne($voitureSelected);
            $photo_princ								= '';
            $equipementComment['comment']				= $voitureSelected->Occas_Commentaire;
            $equipementComment['partenaire']			= $voitureSelected->Occas_Partenaire;
            if($this->intParam('idAnnonce')) $idAnnonce = $this->intParam('idAnnonce');
            else if ($voitureSelected->IdOccasion != null) $idAnnonce = $voitureSelected->IdOccasion;
            if(isset($idAnnonce) && ($idAnnonce != '')){
                
                
                $annonceSelected        = $voitureSelected;
                $idFormuleSelected      = $annonceSelected->annonce_formule_id;
                if($annonceSelected->annonce_formule_id == 0)
                    $idFormuleSelected  = annonceFormuleSrv::getFormuleFromOldDatas($voitureSelected->Occas_Reference);                    
                $aPPE					= annonceFormuleSrv::getParutionPhotoEnrichisByFormuleId($idFormuleSelected);
                $formuleSelected        = common::chargeParId($idFormuleSelected, "ao_formule");
                //pour affichage des options supplémentaires 
                $recapAnnonceChoix      = annonceFormuleSrv::getAnnonceRecap($idOccasion);
				
				
                $an_reference			= new stdClass();
                $an_reference->source	= (common::chargeParId($annonceSelected->annonce_source_id, "ao_annonce_source")) ? common::chargeParId($annonceSelected->annonce_source_id, "ao_annonce_source")->source_name : '';
				
                $an_reference->prov		= (common::chargeParId($annonceSelected->annonce_provenance_id, "ao_annonce_provenance"))?common::chargeParId($annonceSelected->annonce_provenance_id, "ao_annonce_provenance")->provenance_name:'';
				
                $an_reference->parut	= (common::chargeParId($annonceSelected->annonce_parution_id, "ao_annonce_parution"))?common::chargeParId($annonceSelected->annonce_parution_id, "ao_annonce_parution")->parution_name : $aPPE['parutionSelected'];

                $an_reference->photo	= (common::chargeParId($annonceSelected->annonce_photo_id, "ao_annonce_photo")) ? common::chargeParId($annonceSelected->annonce_photo_id, "ao_annonce_photo")->photo_name : $aPPE['photoSelected'];

                $an_reference->enr		= (common::chargeParId($annonceSelected->annonce_enrichissement_id, "ao_annonce_enrichissement")) ? common::chargeParId($annonceSelected->annonce_enrichissement_id, "ao_annonce_enrichissement")->enrichissement_name : $aPPE['enrSelected'];

                $an_num_parut = annonceParutionSrv::getParutionNum($voitureSelected->Occas_DateSaisie);
				
                $photoAnnonceParams['annonceSelected'] = $annonceSelected;

                $equipementParams['annonceSelected']=$annonceSelected->IdOccasion;

                $choixEquipements       = annonceEquipementSrv::getChoixEquipementsByAnnonceId($annonceSelected->IdOccasion);

                $rep->body->assign('annonceSelected'       , $annonceSelected);
                $rep->body->assign('choixEquipements'      , $choixEquipements);

            } else{
                if($this->intParam('idOccasion')){
                     
                    $an_reference		= annonceSrv::genererNomRef($voitureSelected->Occas_Reference);
                    $references			= annonceSrv::genererRef($voitureSelected);
                    $an_num_parut		= substr($voitureSelected->Occas_Reference, 0, 3);
                    $an_num_refer		= $an_num_parut.'-'.substr($voitureSelected->Occas_Reference, 12);
                    $rep->body->assign('an_num_refer',$an_num_refer);
                    $rep->body->assign('references', $references);
                }
            }
            /*
             * recuperer les photos
             */
			       
            $photo = $photoSrc = $photo_princ = array();
			
            //tester si le repertoire existe
            $trouve = false;
            $dirPath = JELIX_APP_WWW_PATH . PATH_ANNONCE_IMG . $idOccasion;
            if (is_dir($dirPath)){
                //lister les images dans le repertoire
                if ($dh = opendir($dirPath)) {
                    while (($file = readdir($dh)) !== false) {
                        $filename = $dirPath . '/'. $file;
                        $ext = explode(".", $file);
                        if (file_exists($filename) && isset($ext[1]) && toolsFile::is_image($ext[1])) {
                            // formation de l'objet photo
                            $images = new stdClass();
                            $images->photo_name = PATH_ANNONCE_IMG . $idOccasion . '/' . $file;
                            $photo[] = $images;
                            $imgPath = "";
                            $trouve = true;
                        }
                    }
                    closedir($dh);
                }
            }
            if($trouve) {
                $photo_princ = $photo[0]->photo_name;
                $rep->body->assign('photoOccasion', $photo[0]->photo_name);
                $rep->body->assign('fimage', 1);
            }

			
            if($annonceS[0]->IdOccasion){
                $photoSrc = annonceSrv::getPhotoAnnonce($annonceS[0]->IdOccasion);
            }
            if(sizeof($photoSrc) > 0){
                $photo = array_merge($photo, $photoSrc);
            }

            if(($photo_princ == '') && (sizeof($photoSrc) > 0)){
                $photo_princ = $photoSrc[0]->photo_name;
            }
			
            /* fin photos princ*/
           
            $photoAnnonceParams['idOccasion']	= $this->intParam('idOccasion');
            $equipementParams['equipementTxt']	= $voitureSelected->Occas_Equip ;
            $vendeur							= common::chargeParId($voitureSelected->Occas_Vendeur, "ao_vendeur");
			$vendeur->Vendeur_Naissance			= LibUtil::toDateFR($vendeur->Vendeur_Naissance) ;
            $dpt								= common::chargeParId($voitureSelected->Occas_Departement, "ao_departement")->departement_num;
            // pop up mail si clic sur supprimer
            $templatemail = common::liste('ao_mail_templates');

            $rep->body->assign('idOccasion',$this->intParam('idOccasion'));
            $rep->body->assign('vendeur',$vendeur);
            $rep->body->assign('voiture',$voitureSelected);
            $rep->body->assign('photo_princ',$photo_princ);
            $an_partenaire = ($voitureSelected->Occas_Partenaire != '') ? common::chargeParId($voitureSelected->Occas_Partenaire, "ao_partenaire")->Part_Libelle : "";
            
            $rep->body->assign('an_num_parut',$an_num_parut);
            $imgPath = PHOTO_ANNONCE_PATH;
            $rep->body->assign('imgPath', $imgPath);
            $rep->body->assign('an_partenaire',$an_partenaire);
            $rep->body->assign('an_reference',$an_reference);
            $rep->body->assign('marque',$marque);
            $rep->body->assign('modele',$modele);
            $rep->body->assign('categ',$categ);
            $rep->body->assign('photo', $photo);
            $rep->body->assign('carbu',$carbu);
            $rep->body->assign('moyenne',$moyenne);
            $rep->body->assign('dpt',$dpt);
            $rep->body->assign('formuleSelected',$formuleSelected);
            $rep->body->assign('recapAnnonceChoix',$recapAnnonceChoix);
            $rep->body->assign('templatemail',$templatemail);
            $rep->body->assign($aPPE);
            
        }

        /*
         * Vérifie s y a des modifs
         */

        $modifAnonce = annonceSrv::checkIfModifExist($idOccasion);
        if($modifAnonce != null)
        $rep->body->assign('modifAnonce',$modifAnonce);
        return $rep;
    }


     /**
     * Get les options
     *
     * @return
     */
     public function ajaxGetFormuleId () {
        $rep = $this->getResponse('json');

        try {
            $formuleId  = $this->intParam('formuleId', 0) ;
            $choix      = $this->param('choix') ;

            $rep->data = 'http://' . $_SERVER['SERVER_NAME'] .  jUrl::get('annonce~BoAnnonce:editer', array("choix-form"=>$formuleId,"choix"=>$choix, "RefPaiement" =>'cb'));

        } catch(exception $e) {
            die($e->getMessage());
        }

        return $rep;
    }
    
    /*
     * Fonction gestion formule/Option BO
     * 
     */
    public function formuleOptions(){
      
        jClasses::inc("commun~common");
        jClasses::inc('essais~essaisSrv') ;
        jClasses::inc('marqueModele~marqueSrv') ;
        jClasses::inc('publicite~pubSrv');
        jClasses::inc('commun~parametre');
        jClasses::inc('annonce~annonceSrv');
        jClasses::inc("annonce~annonceCoordonneesSrv");
        jClasses::inc("annonce~annonceOrigineSrv");
        jClasses::inc("annonce~annonceGarantieSrv");
        jClasses::inc("annonce~annonceFormuleSrv") ;
        jClasses::inc("formule~formuleSrv");
        jClasses::inc("formule~formuleOptionSrv");
        jClasses::inc('temoignage~temoignageSrv');
        jClasses::inc('annonce~annoncePaiementSrv');

        $rep					= $this->getResponse('html');
        $idOccasion				= $this->intParam('idOccasion',0);
		 
        
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/css/annonceGestion.css');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/annonceChoixFormule.css');
        $rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/jquery-ui.css');
		$rep->addCSSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/css/ui.multiselect.css');

        $rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery-ui.min.js');
		$rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/jquery.localisation-min.js');
		$rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/ui.multiselect.js');
   		$rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/back/js/entreprise.js');
   		$rep->addJSLink($GLOBALS['gJConfig']->urlengine['basePath'].'design/front/js/choixFormuleGestion.js');

        
        $voiture				 = common::chargeParId($idOccasion, "ao_voiture_occasion");
        $reglement				 = common::liste('ao_option_typepaiement');

        //recuperer la formule si liaison entre annonce-formule ou ancienne donnée
        if (isset($voiture->IdOccasion) && $voiture->IdOccasion){
             $annonce            = $voiture;
             $idFormuleSelected  = $annonce->annonce_formule_id;
             if($annonce->annonce_formule_id == 0)
                $idFormuleSelected  = annonceFormuleSrv::getFormuleFromOldDatas($voiture->Occas_Reference);
        } else {
            $idFormuleSelected  = annonceFormuleSrv::getFormuleFromOldDatas($voiture->Occas_Reference);
            $annonce            = $voiture;
        }
        $formuleSelected		= common::chargeParId($idFormuleSelected, "ao_formule");
        $infosFormule			= annonceFormuleSrv::getInfosFormule($idFormuleSelected);
        
        $formule				= annonceFormuleSrv::getFormule();
		
        $choixFormules			= annonceFormuleSrv::getFormulesChoices($formuleSelected->id);
        $optPrixSup				= annonceFormuleSrv::getOptionsPrixSup($choixFormules,$this->intParam('idOccasion'));
        $tabChoixSelected		= explode(',',annonceFormuleSrv::getAnnonceChoix($this->intParam('idOccasion')));
        $recapAnnonceFormule	= annonceFormuleSrv::getFormuleRecap($idFormuleSelected);
        $recapAnnonceChoix		= annonceFormuleSrv::getAnnonceRecap($idOccasion);

       //informations utiles pour le paiement CB 
        $pathregret				= 'http://' . $_SERVER['SERVER_NAME'] . jUrl::get('annonce~FoAnnoncePaiement:regret');
        $urlRetourDefaut		= 'http://' . $_SERVER['SERVER_NAME'] .  jUrl::get('annonce~BoAnnonce:previsualiser', array('idOccasion'=>$idOccasion));

        $vendeur				= annoncePaiementSrv::getVendeur($idOccasion);

        // Récupération des données correspondant à l'annonce
        $rep->menusActifs		= adminHtmlResponse::MENU_ANNONCES ;
        $rep->bodyTpl			= 'annonce~BoFormuleOption' ;
        
        $rep->body->assign('infosFormule', $infosFormule);
        $rep->body->assign('idOccasion', $idOccasion);
        $rep->body->assign('tabChoixSelected', $tabChoixSelected);
        $rep->body->assign('annonce', $annonce);
        $rep->body->assign('optPrixSup', $optPrixSup);
        $rep->body->assign('formuleSelected', $formuleSelected);
        $rep->body->assign('recapAnnonceFormule', $recapAnnonceFormule);
        $rep->body->assign('recapAnnonceChoix', $recapAnnonceChoix);
        $rep->body->assign('reglement', $reglement);
        $rep->body->assign('vendeur', $vendeur);
        $rep->body->assign('pathregret', $pathregret);
        $rep->body->assign('urlRetourDefaut', $urlRetourDefaut);
        $rep->body->assign('formule', $formule);        
        

        return $rep;
        
    }
    
    /*
     * Enregistrement après modification formule/options
     * 
     */
    function saveFormuleOptionsEdited(){
        
        
        jClasses::inc("commun~common");
        jClasses::inc('essais~essaisSrv') ;
        jClasses::inc('marqueModele~marqueSrv') ;
        jClasses::inc('publicite~pubSrv');
        jClasses::inc('commun~parametre');
        jClasses::inc('annonce~annonceSrv');
        jClasses::inc("annonce~annonceCoordonneesSrv");
        jClasses::inc("annonce~annonceOrigineSrv");
        jClasses::inc("annonce~annonceGarantieSrv");
        jClasses::inc("annonce~annonceFormuleSrv") ;
        jClasses::inc("formule~formuleSrv");
        jClasses::inc("formule~formuleOptionSrv");
        jClasses::inc('temoignage~temoignageSrv');


        //paramètres venant de paiement par CB
        $idOcc = $this->intParam('idOcc', 0) ;
        $cf    = $this->intParam('cf', 0) ;

        /*traitement sauvegarde*/
        $idOccasion         = ($idOcc) ? $idOcc : $this->intParam('idOccasion') ;
        $formuleId          = ($cf)? $cf        : $this->intParam('choix-form') ;
        $choixSelected      = $this->param('choix') ;
        $typePayement       = $this->intParam('typePayement', 1) ;



        $optParution    = annonceFormuleSrv::generateOptParutionByFormuleId($formuleId);
        $optParution    = $optParution['option'];
        
        $formuleSelected = common::chargeParId($formuleId, 'ao_formule');

        //calcul et mise à jour prix de l'annonce
        if ($choixSelected){
            $tabPrix = formuleSrv::getPrixOptionChoisie($choixSelected);
            $prixAnnonceChoix = $tabPrix[0]->prix_option;
        }

        $prixAnnonce = $formuleSelected->prix + $tabPrix[0]->prix_option;

        if ($idOccasion) {
           annonceSrv::updateOptParution($idOccasion, $optParution);
           annonceFormuleSrv::linkAnnonceFormuleChoix($idOccasion, $formuleSelected->id, $choixSelected);
        }
        //MAJ Occas_MontantPaye après validation
        if($prixAnnonce && $idOccasion){
            annonceSrv::updateOccasPaiement($idOccasion,'cb', $prixAnnonce);
        }

       // MAJ de Occas_Estpaye = 1 après validation paiement
       if ($idOccasion) {
            annonceSrv::updatePaiement($idOccasion);
       }

        /* fin traitement sauvegarde*/
        
        $rep         = $this->getResponse('redirect');
        $rep->action = 'annonce~BoAnnonce:formuleOptions';
        $rep->params = array('idOccasion'=>$idOccasion);

        return $rep;
        
    }


    
     /**
     * Get les options
     *
     * @return
     */
     public function ajaxGetFormuleOptions () {
        $rep = $this->getResponse('json');

        try {
            $idOcc          = $this->intParam('idOcc', 0) ;
            $idOccasion     = ($idOcc) ? $idOcc : $this->intParam('idOccasion', 0) ;
            $formuleId      = $this->intParam('formuleId', 0) ;
            $choixSelected  = $this->param('choixSelected') ;

            $rep->data = 'http://' . $_SERVER['SERVER_NAME'] .  jUrl::get("annonce~BoAnnonce:saveFormuleOptionsEdited", array('idOcc'=>$idOccasion, 'cf'=>$formuleId,'choix'=>$choixSelected));

        } catch(exception $e) {
            die($e->getMessage());
        }

        return $rep;
    }

	
}
    
